/*
 * daemon.c
 *
 *  Created on: 08/mag/2014
 *      Author: kappa
 */

#include "daemon.h"


//void daemonize(const char *cmd) {
//	#ifndef _WIN32
//	int i;
//	int fd0;
//	int fd1;
//	int fd2;
//	pid_t pid;
//	struct rlimit rl;
//	struct sigaction sa;
//	/*
//	 * Clear file creation mask.
//	 */
//	umask(0);
//
//	/*
//	 * Get maximum number of file descriptors.
//	 */
//	if (getrlimit(RLIMIT_NOFILE, &rl) < 0){
//		//err_quit("%s: can't get file limit", cmd);
//		exit(1);
//	}
//	/*
//	 * Become a session leader to lose controlling*/
//	if ((pid = fork()) < 0){
//		exit(1);
//		//err_quit("%s: can't fork", cmd);
//	}
//	else if (pid != 0){ /* parent */
//		exit(0);
//	}
//	setsid();
//
//	/*
//	 * Ensure future opens won't allocate controlling TTYs.*/
//	sa.sa_handler = SIG_IGN;
//	sigemptyset(&sa.sa_mask);
//	sa.sa_flags = 0;
//	if (sigaction(SIGHUP, &sa, NULL) < 0){
//		//err_quit("%s: can't ignore SIGHUP");
//		exit(1);
//	}
//	if ((pid = fork()) < 0){
//		//err_quit("%s: can't fork", cmd);
//		exit(1);
//	}
//	else if (pid != 0) /* parent */
//		exit(0);
//	/*
//	 * Change the current working directory to the root so
//	 * we won't prevent file systems from being unmounted.
//	 */
//	if (chdir("/") < 0){
//	//err_quit("%s: can't change directory to /");
//		exit(1);
//	}
//	/*
//	 * Close all open file descriptors.
//	 */
//	if (rl.rlim_max == RLIM_INFINITY)
//		rl.rlim_max = 1024;
//	for (i = 0; i < rl.rlim_max; i++)
//		close(i);
//	/*
//	 * Attach file descriptors 0, 1, and 2 to / dev / null.
//	*/
//	fd0 = open("/dev/null", O_RDWR);
//	fd1 = dup(0);
//	fd2 = dup(0);
//	/*
//	 * Initialize thelog file.*/
//	openlog(cmd, LOG_CONS, LOG_DAEMON);
//	if (fd0 != 0) {
//	syslog(LOG_ERR, "unexpected file descriptor, %d",fd0);
//		exit(1);
//	}
//	#endif
//}
//
//
//int already_running(void) {
//	#ifndef _WIN32
//	int fd;
//	char buf[16];
//	fd = open(LOCKFILE, O_RDWR | O_CREAT, LOCKMODE);
//	if (fd < 0) {
//		syslog(LOG_ERR, "can't open %s: %s", LOCKFILE, strerror(errno));
//		exit(1);
//	}
//	if (lockf(fd,F_LOCK,0) < 0) {
//		if (errno == EACCES || errno == EAGAIN) {
//			close(fd);
//			return (1);
//		}
//		syslog(LOG_ERR, "can't lock %s: %s", LOCKFILE, strerror(errno));
//		exit(1);
//	}
//	ftruncate(fd, 0);
//	sprintf(buf, "%ld", (long) getpid());
//	write(fd, buf, strlen(buf) + 1);
//	#endif
//	return (0);
//}
